﻿using System.Data.SqlClient;
using BLToolkit.Data;
using BLToolkit.DataAccess;
using Data_Access_Layer;
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using log4net;
using log4net.Config;

namespace CaffeBillard
{
    public partial class FormRevenue : DevComponents.DotNetBar.Office2007Form
    {
        protected static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
        public FormRevenue()
        {
            InitializeComponent();
            dgv1.AutoGenerateColumns = false;
            dgv2.AutoGenerateColumns = false;
        }
        #region Phần khai báo
        private int max1 = 0;
        private int max2 = 0;
        private int min1 = 0;
        private int min2 = 0;
        private string name;
        private float tong=0;
        #endregion

        #region Thống kê 
        private void FormRevenue_Load(object sender, EventArgs e)
        {
            name = Employee.Objects.FirstOrDefault(x => x.Id == WorkSession.Current.CurrentAccount.EmpId).Name.ToString();
            if (GetYear() != null)
            {
                //Đổ dữ liệu vào cbb tháng, năm
                for (int i = 1; i <= 12; i++)
                {
                    cbbMonth.Items.Add(i);
                    cbbMonths.Items.Add(i);
                }

                for (int i = GetYear()[0]; i <= GetYear()[1]; i++)
                {
                    cbbYear.Items.Add(i);
                    cbbYears.Items.Add(i);
                }
            }
            else
            {
                MessageBox.Show("Không có dữ liệu để thống kê");
                gbEnable.Enabled = false;
            }


        }




        //Lấy năm
        private List<int> GetYear()
        {
            var or = Order.Objects.All;
            if (or.Count > 0)
            {
                List<int> year = new List<int>();
                int max = 0;
                int min = or[0].OrderDate.Year;
                for (int i = 0; i < or.Count; i++)
                {
                    if (or[i].OrderDate.Year > max)
                        max = or[i].OrderDate.Year;
                }

                for (int i = 0; i < or.Count; i++)
                {
                    if (or[i].OrderDate.Year < max)
                        min = or[i].OrderDate.Year;
                }
                year.Add(max);
                year.Add(min);
                return year;
            }
            else
                return null;
        }
        //Chọn kiểu báo cáo
        private void cbbType_SelectedIndexChanged(object sender, EventArgs e)
        {
            switch (cbbType.Text)
            {
                case "Theo ngày":
                    gbDay.Enabled = btnOk.Enabled = true;
                    cbbMonth.Enabled = cbbQuarter.Enabled = cbbYear.Enabled = false;
                    break;
                case "Theo tháng":
                    gbDay.Enabled = false;
                    cbbQuarter.Enabled = false;
                    cbbMonth.Enabled = cbbYear.Enabled = btnOk.Enabled = true;
                    break;
                case "Theo quý":
                    gbDay.Enabled = false;
                    cbbMonth.Enabled = false;
                    cbbQuarter.Enabled = cbbYear.Enabled = btnOk.Enabled = true;
                    break;
                case "Theo năm":
                    gbDay.Enabled = false;
                    cbbYear.Enabled = btnOk.Enabled = true;
                    cbbQuarter.Enabled = cbbMonth.Enabled = false;
                    break;
              
            }
        }


        //In thống kê
        private void btnPrint_Click(object sender, EventArgs e)
        {
            if (dgv1.Rows.Count - 1 == 0 && dgv2.Rows.Count - 1 == 0)
                MessageBox.Show("Không có dữ liệu để in báo cáo");
            else if (printDialog1.ShowDialog() == DialogResult.OK)
                pDTK.Print();
            page = 1;
            page2 = 1;
        }

        //thống kê
        private void btnOk_Click(object sender, EventArgs e)
        {
            try
            {
                XmlConfigurator.Configure();
                log.Info(name + " thong ke doanh thu ngay " + dtpDateFrom.Value.ToString());
                lbDesk.Items.Clear();
                lbDesk2.Items.Clear();
                lbArticle.Items.Clear();
                lbArticle2.Items.Clear();
                int n = 0;
                if (dtpDateFrom.Value == null)
                    MessageBox.Show("Hãy nhập ngày bắt đầu");
                else
                {
                    switch (cbbType.Text)
                    {
                        case "Theo ngày":
                            if (dtpDateTo.Value.ToString() == "1/1/0001 12:00:00 AM")
                                GetByDay(dtpDateFrom.Value, dtpDateFrom.Value);
                            else
                            {
                                if (dtpDateFrom.Value > dtpDateTo.Value)
                                    MessageBox.Show("Ngày bắt đầu phải nhỏ hơn ngày kết thúc");
                                else
                                    GetByDay(dtpDateFrom.Value, dtpDateTo.Value);
                            }
                            break;
                        case "Theo tháng":

                            if (!int.TryParse(cbbMonth.Text, out n))
                                MessageBox.Show("Hãy chọn 1 tháng trước khi thống kê");
                            else if (!int.TryParse(cbbYear.Text, out n))
                                MessageBox.Show("Hãy chọn 1 năm trước khi thống kê");
                            else
                                GetByMonth(int.Parse(cbbMonth.Text), int.Parse(cbbYear.Text));
                            break;
                        case "Theo quý":
                            if (!int.TryParse(cbbQuarter.Text, out n))
                                MessageBox.Show("Hãy chọn 1 quý trước khi thống kê");
                            else if (!int.TryParse(cbbYear.Text, out n))
                                MessageBox.Show("Hãy chọn 1 năm trước khi thống kê");
                            else
                                GetByQuater(int.Parse(cbbQuarter.Text), int.Parse(cbbYear.Text));
                            break;
                        case "Theo năm":
                            if (!int.TryParse(cbbYear.Text, out n))
                                MessageBox.Show("Hãy chọn 1 năm trước khi thống kê");
                            else
                                GetByYear(int.Parse(cbbYear.Text));

                            break;

                    }
                    if (dgv1.Rows.Count - 1 > 0 || dgv2.Rows.Count - 1 > 0)
                    {
                        GetTotal();
                        btnPrint.Enabled = true;

                        //Thống kê bàn
                        if (Desk_Max() != null)
                        {
                            lbld1.Text = "(" + max1 + ")";
                            foreach (string m in Desk_Max())
                            {
                                lbDesk.Items.Add(m);
                            }
                        }

                        if (Desk_Null() != null)
                        {
                            lbld2.Text = "(0)";
                            foreach (string d in Desk_Null())
                            {
                                lbDesk2.Items.Add(d);
                            }
                        }
                        else
                        {
                            if (Desk_Min() != null)
                            {
                                lbld2.Text = "(" + min1 + ")";
                                foreach (string m in Desk_Min())
                                {
                                    lbDesk2.Items.Add(m);
                                }
                            }
                        }

                        //Thống kê hàng hóa
                        if (Article_Max() != null)
                        {
                            lbla1.Text = "(" + max2 + ")";
                            foreach (string m in Article_Max())
                            {
                                lbArticle.Items.Add(m);
                            }
                        }

                        if (Article_Null() != null)
                        {
                            lbla2.Text = "(0)";
                            foreach (string d in Article_Null())
                            {
                                lbArticle2.Items.Add(d);
                            }
                        }
                        else
                        {
                            if (Desk_Min() != null)
                            {
                                lbla2.Text = "(" + min2 + ")";
                                foreach (string m in Article_Min())
                                {
                                    lbArticle2.Items.Add(m);
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Lỗi \n" + ex.Message);
            }


        }

        //Lấy dữ liệu thống kê
        private void GetTotal()
        {
            float tb, tg, tt, tdu;
            tb = tg = tdu = tt = 0;
            int sl = 0;
            if (dgv1.Rows.Count - 1 > 0)
            {
                for (int i = 0; i < dgv1.Rows.Count - 1; i++)
                {
                    tb += float.Parse(dgv1.Rows[i].Cells[2].Value.ToString());
                    tg += float.Parse(dgv1.Rows[i].Cells[3].Value.ToString());

                }
            }
            if (dgv2.Rows.Count - 1 > 0)
            {
                for (int i = 0; i < dgv2.Rows.Count - 1; i++)
                {
                    sl += int.Parse(dgv2.Rows[i].Cells[1].Value.ToString());
                    tdu += float.Parse(dgv2.Rows[i].Cells[2].Value.ToString());
                }
            }
            tt = tb + tdu - tg;
            lblTB.Text = (tb > 0) ? tb.ToString("#,###") : "0";
            lblSL.Text = (sl > 0) ? sl.ToString() : "0";
            lblDU.Text = (tdu > 0) ? tdu.ToString("#,###") : "0";
            lblTG.Text = (tg > 0) ? tg.ToString("#,###") : "0";
            lblTT.Text = (tt > 0) ? tt.ToString("#,###") : "0";
        }


        //Thống kê
        private void GetByDay(DateTime from, DateTime to)
        {

            //  var o1 = OrderDetail.Objects.Join(new Article(), detail => detail.ArtId);
            //from  = Convert.ToDateTime(from.ToShortDateString() + " 23:59:59");

            try
            {
                to = Convert.ToDateTime(to.ToShortDateString() + " 23:59:59");
                IDataParameter[] parameters = new IDataParameter[2];
                parameters[0] = new SqlParameter("@from", from);
                parameters[1] = new SqlParameter("@to", to);
                var a = GetSproc("GetRevenueByDate", parameters);
                if (a != null)
                {
                    dgv1.DataSource = a.Tables[0];
                    dgv2.DataSource = a.Tables[1];
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Lỗi: \n" + ex.Message);
            }
        }
        //Theo tháng
        private void GetByMonth(int month, int year)
        {
            try
            {
                IDataParameter[] parameters = new IDataParameter[2];
                parameters[0] = new SqlParameter("@month", month);
                parameters[1] = new SqlParameter("@year", year);
                var a = GetSproc("GetRevenueByMonth", parameters);
                if (a != null)
                {
                    dgv1.DataSource = a.Tables[0];
                    dgv2.DataSource = a.Tables[1];
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Lỗi: \n" + ex.Message);
            }
        }
        //Theo quý
        private void GetByQuater(int quater, int year)
        {
            try
            {
                IDataParameter[] parameters = new IDataParameter[2];
                parameters[0] = new SqlParameter("@quanter", quater);
                parameters[1] = new SqlParameter("@year", year);
                var a = GetSproc("GetRevenueByQuanter", parameters);
                if (a != null)
                {
                    dgv1.DataSource = a.Tables[0];
                    dgv2.DataSource = a.Tables[1];
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Lỗi: \n" + ex.Message);
            }

        }
        //Theo năm
        private void GetByYear(int year)
        {
            try
            {
                IDataParameter[] parameters = new IDataParameter[1];
                parameters[0] = new SqlParameter("@year", year);
                var a = GetSproc("GetRevenueByYear", parameters);
                if (a != null)
                {
                    dgv1.DataSource = a.Tables[0];
                    dgv2.DataSource = a.Tables[1];
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Lỗi: \n" + ex.Message);
            }
        }

        private DataSet GetSproc(string sprocname, IDataParameter[] parameters)
        {
            try
            {
                var db = new DbManager("DBConnection");
                return db.SetSpCommand(sprocname, parameters).ExecuteDataSet();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Lỗi : \n" + ex.Message);
            }
            return null;
        }


        /// <summary>
        /// Thống kê theo ngày hôm nay
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>

        private void btnToDay_Click(object sender, EventArgs e)
        {

            try
            {
                XmlConfigurator.Configure();
                log.Info(name + " thong ke doanh thu ngay " + DateTime.Now);
                lbDesk.Items.Clear();
                lbDesk2.Items.Clear();
                lbArticle.Items.Clear();
                lbArticle2.Items.Clear();
                DateTime from = Convert.ToDateTime(DateTime.Now.ToShortDateString() + " 00:00:00");
                DateTime to = Convert.ToDateTime(DateTime.Now.ToShortDateString() + " 23:59:59");
                IDataParameter[] parameters = new IDataParameter[2];
                parameters[0] = new SqlParameter("@from", from);
                parameters[1] = new SqlParameter("@to", to);
                var a = GetSproc("GetRevenueByDate", parameters);
                if (a != null)
                {
                    dgv1.DataSource = a.Tables[0];
                    dgv2.DataSource = a.Tables[1];
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Lỗi: \n" + ex.Message);
            }
            if (dgv1.Rows.Count - 1 > 0 || dgv2.Rows.Count - 1 > 0)
            {
                GetTotal();
                btnPrint.Enabled = true;

                //Thống kê bàn
                if (Desk_Max() != null)
                {
                    lbld1.Text = "(" + max1 + ")";
                    foreach (string m in Desk_Max())
                    {
                        lbDesk.Items.Add(m);
                    }
                }

                if (Desk_Null() != null)
                {
                    lbld2.Text = "(0)";
                    foreach (string d in Desk_Null())
                    {
                        lbDesk2.Items.Add(d);
                    }
                }
                else
                {
                    if (Desk_Min() != null)
                    {
                        lbld2.Text = "(" + min1 + ")";
                        foreach (string m in Desk_Min())
                        {
                            lbDesk2.Items.Add(m);
                        }
                    }
                }

                //Thống kê hàng hóa
                if (Article_Max() != null)
                {
                    lbla1.Text = "(" + max2 + ")";
                    foreach (string m in Article_Max())
                    {
                        lbArticle.Items.Add(m);
                    }
                }

                if (Article_Null() != null)
                {
                    lbla2.Text = "(0)";
                    foreach (string d in Article_Null())
                    {
                        lbArticle2.Items.Add(d);
                    }
                }
                else
                {
                    if (Desk_Min() != null)
                    {
                        lbla2.Text = "(" + min2 + ")";
                        foreach (string m in Article_Min())
                        {
                            lbArticle2.Items.Add(m);
                        }
                    }
                }
            }
        }


        //Lấy những bàn không được sử dụng
        private List<string> Desk_Null()
        {
            var desk = Desk.Objects.All;
            List<string> s = new List<string>();
            for (int i = 0; i < dgv1.Rows.Count - 1; i++)
            {
                s.Add(dgv1.Rows[i].Cells[0].Value.ToString());
            }
            List<string> d = new List<string>();
            bool kt = false;
            ;
            for (int j = 0; j < desk.Count; j++)
            {
                for (int i = 0; i < s.Count; i++)
                {
                    if (desk[j].DeskName == s[i])
                    {
                        kt = true;
                        break;
                    }
                }
                if (!kt)
                {
                    d.Add(desk[j].DeskName);

                }
                kt = false;
            }
            if (d.Count > 0)
                return d;
            else
            {
                return null;
            }
        }

        //Tìm những bàn được sử dụng nhiều nhất
        private List<string> Desk_Max()
        {
            try
            {
                int max = 0;
                List<string> m = new List<string>();
                for (int i = 0; i < dgv1.Rows.Count - 1; i++)
                {
                    if (int.Parse(dgv1.Rows[i].Cells[1].Value.ToString()) > max)
                        max = int.Parse(dgv1.Rows[i].Cells[1].Value.ToString());
                }
                max1 = max;
                for (int i = 0; i < dgv1.Rows.Count - 1; i++)
                {
                    if (int.Parse(dgv1.Rows[i].Cells[1].Value.ToString()) == max)
                        m.Add(dgv1.Rows[i].Cells[0].Value.ToString());
                }
                if (m != null)
                    return m;
                else
                {
                    return null;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Lỗi \n" + ex.Message);
            }
            return null;
        }
        //Tìm những bàn được sử dụng ít nhất nhất
        private List<string> Desk_Min()
        {
            try
            {
                int min = int.Parse(dgv1.Rows[0].Cells[1].Value.ToString());
                List<string> m = new List<string>();
                for (int i = 0; i < dgv1.Rows.Count - 1; i++)
                {
                    if (int.Parse(dgv1.Rows[i].Cells[1].Value.ToString()) < min)
                        min = int.Parse(dgv1.Rows[i].Cells[1].Value.ToString());
                }
                min1 = min;
                for (int i = 0; i < dgv1.Rows.Count - 1; i++)
                {
                    if (int.Parse(dgv1.Rows[i].Cells[1].Value.ToString()) == min)
                        m.Add(dgv1.Rows[i].Cells[0].Value.ToString());
                }
                if (m != null)
                    return m;
                else
                {
                    return null;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Lỗi \n" + ex.Message);
            }
            return null;
        }


        //Lấy những bàn không được sử dụng
        private List<string> Article_Null()
        {
            var desk = Article.Objects.All;
            List<string> s = new List<string>();
            for (int i = 0; i < dgv1.Rows.Count - 1; i++)
            {
                s.Add(dgv1.Rows[i].Cells[0].Value.ToString());
            }
            List<string> d = new List<string>();
            bool kt = false;
            ;
            for (int j = 0; j < desk.Count; j++)
            {
                for (int i = 0; i < s.Count; i++)
                {
                    if (desk[j].ArtName == s[i])
                    {
                        kt = true;
                        break;
                    }
                }
                if (!kt)
                {
                    d.Add(desk[j].ArtName);

                }
                kt = false;
            }
            if (d.Count > 0)
                return d;
            else
            {
                return null;
            }
        }

        //Tìm những bàn được sử dụng nhiều nhất
        private List<string> Article_Max()
        {
            try
            {
                int max = 0;
                List<string> m = new List<string>();
                for (int i = 0; i < dgv2.Rows.Count - 1; i++)
                {
                    if (int.Parse(dgv2.Rows[i].Cells[1].Value.ToString()) > max)
                        max = int.Parse(dgv2.Rows[i].Cells[1].Value.ToString());
                }
                max2 = max;
                for (int i = 0; i < dgv2.Rows.Count - 1; i++)
                {
                    if (int.Parse(dgv2.Rows[i].Cells[1].Value.ToString()) == max)
                        m.Add(dgv2.Rows[i].Cells[0].Value.ToString());
                }
                if (m != null)
                    return m;
                else
                {
                    return null;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Lỗi \n" + ex.Message);
            }
            return null;
        }
        //Tìm những bàn được sử dụng ít nhất nhất
        private List<string> Article_Min()
        {
            try
            {
                int min = int.Parse(dgv2.Rows[0].Cells[1].Value.ToString());
                List<string> m = new List<string>();
                for (int i = 0; i < dgv2.Rows.Count - 1; i++)
                {
                    if (int.Parse(dgv1.Rows[i].Cells[1].Value.ToString()) < min)
                        min = int.Parse(dgv1.Rows[i].Cells[1].Value.ToString());
                }
                min2 = min;
                for (int i = 0; i < dgv2.Rows.Count - 1; i++)
                {
                    if (int.Parse(dgv2.Rows[i].Cells[1].Value.ToString()) == min)
                        m.Add(dgv2.Rows[i].Cells[0].Value.ToString());
                }
                if (m != null)
                    return m;
                else
                {
                    return null;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Lỗi \n" + ex.Message);
            }
            return null;
        }
        #endregion


        #region Báo cáo doanh thu

        //Chọn kiểu báo cáo
        private void cbbTypes_SelectedIndexChanged(object sender, EventArgs e)
        {
            btnOK2.Enabled = btnPrint2.Enabled = true;
            switch (cbbTypes.Text)
            {
                case "Theo tháng":
                    cbbMonths.Enabled = cbbYears.Enabled = true;
                    cbbQuanters.Enabled = false;
                    break;
                case "Theo quý":
                    cbbQuanters.Enabled = cbbYears.Enabled = true;
                    cbbMonths.Enabled = false;
                    break;
                case "Theo năm":
                    cbbYears.Enabled = true;
                    cbbQuanters.Enabled = cbbMonths.Enabled = false;
                    break;
            }
        }

        //Báo cáo theo các kiểu đã chọn
        private void btnOK2_Click(object sender, EventArgs e)
        {
            try
            {
                XmlConfigurator.Configure();
                log.Info(name + " bao cao thu doanh thu ");
                int n = 0;
                switch (cbbTypes.Text)
                {
                    case "Theo tháng":
                        if (!int.TryParse(cbbMonths.Text, out n))
                            MessageBox.Show("Hãy chọn một tháng để báo cáo");
                        else if (!int.TryParse(cbbYears.Text, out n))
                            MessageBox.Show("Hãy chọn một năm để báo cáo");
                        else
                        {
                            IDataParameter[] p1 = new IDataParameter[2];
                            p1[0] = new SqlParameter("@month", int.Parse(cbbMonths.Text));
                            p1[1] = new SqlParameter("@year", int.Parse(cbbYears.Text));
                            dgvArtS.DataSource = GetSproc("BaoCaoTheoThang", p1).Tables[0];
                            dgvArtB.DataSource = GetSproc("BaoCaoTheoThang", p1).Tables[1];
                            dgvStock.DataSource = GetSproc("BaoCaoTheoThang", p1).Tables[2];
                            if (GetSproc("BaoCaoTheoThang", p1).Tables[3].Rows[0][0].ToString() != "")
                                tong = float.Parse(GetSproc("BaoCaoTheoThang", p1).Tables[3].Rows[0][0].ToString());
                            else
                            {
                                tong = 0;
                            }
                        }
                        break;
                    case "Theo quý":
                        if (!int.TryParse(cbbQuanters.Text, out n))
                            MessageBox.Show("Hãy chọn một quý để báo cáo");
                        else if (!int.TryParse(cbbYears.Text, out n))
                            MessageBox.Show("Hãy chọn một năm để báo cáo");
                        else
                        {
                            IDataParameter[] p2 = new IDataParameter[2];
                            p2[0] = new SqlParameter("@quanter", int.Parse(cbbQuanters.Text));
                            p2[1] = new SqlParameter("@year", int.Parse(cbbYears.Text));
                            dgvArtS.DataSource = GetSproc("BaoCaoTheoQuy", p2).Tables[0];
                            dgvArtB.DataSource = GetSproc("BaoCaoTheoQuy", p2).Tables[1];
                            dgvStock.DataSource = GetSproc("BaoCaoTheoQuy", p2).Tables[2];
                            if (GetSproc("BaoCaoTheoQuy", p2).Tables[3].Rows[0][0].ToString()!="")
                                tong = float.Parse(GetSproc("BaoCaoTheoQuy", p2).Tables[3].Rows[0][0].ToString());
                            else
                            {
                                tong = 0;
                            }
                        }
                        break;
                    case "Theo năm":
                        if (!int.TryParse(cbbYears.Text, out n))
                            MessageBox.Show("Hãy chọn một năm để báo cáo");
                        else
                        {
                            IDataParameter[] p3 = new IDataParameter[1];
                            p3[0] = new SqlParameter("@year", int.Parse(cbbYears.Text));
                            dgvArtS.DataSource = GetSproc("BaoCaoTheoNam", p3).Tables[0];
                            dgvArtB.DataSource = GetSproc("BaoCaoTheoNam", p3).Tables[1];
                            dgvStock.DataSource = GetSproc("BaoCaoTheoNam", p3).Tables[2];
                            if (GetSproc("BaoCaoTheoNam", p3).Tables[3].Rows[0][0].ToString() != "")
                                tong = float.Parse(GetSproc("BaoCaoTheoNam", p3).Tables[3].Rows[0][0].ToString());
                            else
                            {
                                tong = 0;
                            }
                        }
                        break;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Lỗi \n" + ex.Message);
            }
            if (dgvArtB.Rows.Count - 1 > 0 || dgvArtS.Rows.Count - 1 > 0)
            {
                GetRevenue();
            }
            else
            {
                Get_Stock();
                lblM.Text ="0";
                lblTM.Text = "0";
                lblB.Text = "0";
                lblTTB.Text = "0";
                lblTC.Text = "0";
                lblTTT.Text = "0";
                lblTL.Text = "0";
            }
        }


        //Thống kê lại báo cáo
        private void GetRevenue()
        {
            float ttm, ttb, tc, tt;
            ttm = ttb = tc = tt  = 0;
            int slm = 0, slb = 0;
            for (int i = 0; i < dgvArtB.Rows.Count - 1; i++)
            {
                slm += int.Parse(dgvArtB.Rows[i].Cells[1].Value.ToString());
                ttm += float.Parse(dgvArtB.Rows[i].Cells[2].Value.ToString());
            }
            for (int i = 0; i < dgvArtS.Rows.Count - 1; i++)
            {
                slb += int.Parse(dgvArtS.Rows[i].Cells[1].Value.ToString());
                ttb += float.Parse(dgvArtS.Rows[i].Cells[2].Value.ToString());
            }
          
            tc = ttm;
            tt = tong;
            lblM.Text = slm.ToString();
            lblTM.Text = ttm.ToString("#,###");
            lblB.Text = slb.ToString();
            lblTTB.Text = ttb.ToString("#,###");
            lblTC.Text = tc.ToString("#,###");
            lblTTT.Text = tt.ToString("#,###");
            lblTL.Text = (tt - tc).ToString("#,###");
          Get_Stock();
        }

        //Tính số lượng và giá trị tồn kho
        private void Get_Stock()
        {
            int sltk = 0;
            float tk = 0;
            for (int i = 0; i < dgvStock.Rows.Count - 1; i++)
            {
                sltk += int.Parse(dgvStock.Rows[i].Cells[1].Value.ToString());
                tk += float.Parse(dgvStock.Rows[i].Cells[2].Value.ToString());
            }
            lblSLTK.Text = sltk.ToString();
            lblTK.Text = tk.ToString("#,###");
        }
        #endregion

        #region In thống kê báo cáo
        private int page = 1, page2 = 1;
        //In thống kê doanh thu
        private void pDTK_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {
            try
            {

                if (page == 1)
                {
                    string s = "";
                    switch (cbbType.Text)
                    {
                        case "Theo ngày":
                            if (dtpDateTo.Value.ToString() == "1/1/0001 12:00:00 AM")
                                s = "Ngày " + dtpDateFrom.Value.ToShortDateString();
                            else
                            {
                                s = "Từ ngày" + dtpDateFrom.Value.ToShortDateString() + " đến ngày " +
                                    dtpDateTo.Value.ToShortDateString();
                            }
                            break;
                        case "Theo tháng":
                            s = "Tháng " + cbbMonth.Text + " năm " + cbbYear.Text;
                            break;
                        case "Theo quý":
                            s = "Quý " + cbbQuarter.Text + " năm " + cbbYear.Text;
                            break;
                        case "Theo năm":
                            s = "Năm " + cbbYear.Text;
                            break;
                    }
                    string strDisplay = "Thống kê doanh thu"; //In dòng tiêu đề, tên quán
                    Font fntString = new Font("Times New Roman", 18, FontStyle.Bold);
                    e.Graphics.DrawString(strDisplay, fntString, Brushes.Black, 250, 150);

                    fntString = new Font("Times New Roman", 10, FontStyle.Bold);
                    e.Graphics.DrawString(s, fntString, Brushes.Black, 260, 190);

                    fntString = new Font("Times New Roman", 10, FontStyle.Regular);
                    e.Graphics.DrawString("Nhân viên thống kê:      " + name, fntString, Brushes.Black, 100, 230);
                    //In tên nhân viên thống kê

                    //In thống kê bàn
                    fntString = new Font("Times New Roman", 10, FontStyle.Bold);
                    e.Graphics.DrawString("THỐNG KÊ SỬ DỤNG BÀN", fntString, Brushes.Black, 100, 260);
                    //In dòng "Chi tiết đồ dùng"

                    fntString = new Font("Times New Roman", 10, FontStyle.Regular);
                    e.Graphics.DrawString("Tên bàn", fntString, Brushes.Black, 100, 290); //In dòng tên bàn
                    e.Graphics.DrawString("Số lần sử dụng", fntString, Brushes.Black, 200, 290);
                    //In dòng "số lần sử dụng"
                    e.Graphics.DrawString("Tổng tiền bàn", fntString, Brushes.Black, 300, 290);
                    //In dòng "tổng tiền bàn"
                    e.Graphics.DrawString("Tổng tiền giảm", fntString, Brushes.Black, 430, 290);
                    //In dòng "tổng tiền giảm"

                    int count = 0;
                    for (int i = 0; i < dgv1.Rows.Count - 1; i++)
                    {

                        e.Graphics.DrawString(dgv1.Rows[i].Cells[0].Value.ToString(), fntString, Brushes.Black, 100,
                                              310 + count); //In tên bàn
                        e.Graphics.DrawString(dgv1.Rows[i].Cells[1].Value.ToString(), fntString, Brushes.Black, 200,
                                              310 + count); //In số lần sử dụng
                        e.Graphics.DrawString(dgv1.Rows[i].Cells[2].Value.ToString(), fntString, Brushes.Black, 300,
                                              310 + count); //In tổng tiền bàn
                        e.Graphics.DrawString(dgv1.Rows[i].Cells[3].Value.ToString(), fntString, Brushes.Black, 430,
                                              310 + count); //In tổng tiền giảm
                        count += 20;
                    }

                    e.Graphics.DrawLine(new Pen(Color.Black, 1), 100, 330 + count, 500, 330 + count);
                    //In dấu gạch ngang

                    //In thống đồ uống
                    fntString = new Font("Times New Roman", 10, FontStyle.Bold);
                    e.Graphics.DrawString("THỐNG KÊ ĐỒ UỐNG", fntString, Brushes.Black, 100, 350 + count);

                    fntString = new Font("Times New Roman", 10, FontStyle.Regular);
                    e.Graphics.DrawString("Đồ dùng", fntString, Brushes.Black, 100, 380 + count); //In dòng "đồ dùng
                    e.Graphics.DrawString("Số lượng", fntString, Brushes.Black, 250, 380 + count); //In dòng "số lượng"
                    e.Graphics.DrawString("Thành tiền", fntString, Brushes.Black, 320, 380 + count);
                    //In dòng "thành tiền"


                    for (int i = 0; i < dgv2.Rows.Count - 1; i++)
                    {

                        e.Graphics.DrawString(dgv2.Rows[i].Cells[0].Value.ToString(), fntString, Brushes.Black, 100,
                                              400 + count);
                        e.Graphics.DrawString(dgv2.Rows[i].Cells[1].Value.ToString(), fntString, Brushes.Black, 250,
                                              400 + count);
                        e.Graphics.DrawString(dgv2.Rows[i].Cells[2].Value.ToString(), fntString, Brushes.Black, 320,
                                              400 + count);
                        count += 20;
                    }

                    e.Graphics.DrawLine(new Pen(Color.Black, 1), 100, 420 + count, 500, 420 + count);
                    //In dấu gạch ngang

                    //Tổng thống kê

                    fntString = new Font("Times New Roman", 10, FontStyle.Bold);
                    e.Graphics.DrawString("KẾT QUẢ THỐNG KÊ", fntString, Brushes.Black, 100, 440 + count);

                    fntString = new Font("Times New Roman", 10, FontStyle.Bold);
                    e.Graphics.DrawString("Tổng tiền bàn:       " + lblTB.Text, fntString, Brushes.Black, 100,
                                          470 + count);
                    e.Graphics.DrawString("Tống số lượng:       " + lblSL.Text, fntString, Brushes.Black, 100,
                                          490 + count);
                    e.Graphics.DrawString("Tổng tiền đồ uống:   " + lblDU.Text, fntString, Brushes.Black, 100,
                                          510 + count); //In tổng tiền bàn
                    e.Graphics.DrawString("Tổng tiền giảm:      " + lblTG.Text, fntString, Brushes.Black, 100,
                                          530 + count); //In tổng tiền bàn
                    e.Graphics.DrawString("Tổng doanh thu:      " + lblTT.Text, fntString, Brushes.Black, 100,
                                          550 + count); //In tổng tiền bàn
                    e.HasMorePages = true;
                }
                if (page == 2)
                {
                    string strDisplay = "";
                    //In thống kê số lượng sử dụng bàn
                    Font fntString = new Font("Times New Roman", 10, FontStyle.Bold);
                    e.Graphics.DrawString("THỐNG KÊ SỬ DỤNG BÀN, ĐỒ DÙNG", fntString, Brushes.Black, 100, 150);


                    e.Graphics.DrawString("Bàn dùng nhiều nhất " + lbld1.Text + "", fntString, Brushes.Black, 100, 180);
                    e.Graphics.DrawString("Bàn dùng ít nhất " + lbld2.Text + "", fntString, Brushes.Black, 280, 180);


                    e.Graphics.DrawString("Đồ dùng nhiều nhất  " + lbla1.Text + "", fntString, Brushes.Black, 430, 180);
                    e.Graphics.DrawString("Đồ dùng ít nhất " + lbla2.Text + "", fntString, Brushes.Black, 610, 180);

                    fntString = new Font("Times New Roman", 10, FontStyle.Regular);
                    int count = 0;

                    for (int i = 0; i < lbDesk.Items.Count; i++)
                    {
                        e.Graphics.DrawString(lbDesk.Items[i].ToString(), fntString, Brushes.Black, 100, 200 + count);
                        count += 20;
                    }
                    int c1 = 0, c2 = 0, c3 = 0;
                    for (int i = 0; i < lbDesk2.Items.Count; i++)
                    {
                        e.Graphics.DrawString(lbDesk2.Items[i].ToString(), fntString, Brushes.Black, 280, 200 + c1);
                        c1 += 20;
                    }
                    for (int i = 0; i < lbArticle.Items.Count; i++)
                    {
                        e.Graphics.DrawString(lbArticle.Items[i].ToString(), fntString, Brushes.Black, 430, 200 + c2);
                        c2 += 20;
                    }
                    for (int i = 0; i < lbArticle2.Items.Count; i++)
                    {
                        e.Graphics.DrawString(lbArticle2.Items[i].ToString(), fntString, Brushes.Black, 610, 200 + c3);
                        c3 += 20;
                    }
                    e.HasMorePages = false;
                }
                page++;

            }
            catch (Exception ex)
            {
                MessageBox.Show("Lỗi: \n" + ex.Message);
            }
        }


        //In báo cáo doanh thu
        private void pDBC_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {
            try
            {

                if (page2 == 1)
                {
                    string s = "";
                    switch (cbbTypes.Text)
                    {
                        case "Theo tháng":
                            s = "Tháng " + cbbMonths.Text + " năm " + cbbYears.Text;
                            break;
                        case "Theo quý":
                            s = "Quý " + cbbQuanters.Text + " năm " + cbbYears.Text;
                            break;
                        case "Theo năm":
                            s = "Năm " + cbbYears.Text;
                            break;
                    }
                    string strDisplay = "BÁO CÁO DOANH THU"; //In dòng tiêu đề, tên quán
                    Font fntString = new Font("Times New Roman", 18, FontStyle.Bold);
                    e.Graphics.DrawString(strDisplay, fntString, Brushes.Black, 250, 150);

                    fntString = new Font("Times New Roman", 10, FontStyle.Bold);
                    e.Graphics.DrawString(s, fntString, Brushes.Black, 280, 190);

                    fntString = new Font("Times New Roman", 10, FontStyle.Regular);
                    e.Graphics.DrawString("Nhân viên lập báo cáo:      " + name, fntString, Brushes.Black, 100, 230);
                    //In tên nhân viên thống kê

                    //In thống kê bàn
                    fntString = new Font("Times New Roman", 10, FontStyle.Bold);
                    e.Graphics.DrawString("DANH SÁCH MẶT HÀNG ĐÃ NHẬP", fntString, Brushes.Black, 100, 260);
                    //In dòng "Chi tiết đồ dùng"


                    e.Graphics.DrawString("Tên mặt hàng", fntString, Brushes.Black, 100, 290); //In dòng tên bàn
                    e.Graphics.DrawString("Số lượng", fntString, Brushes.Black, 250, 290);
                    //In dòng "số lần sử dụng"
                    e.Graphics.DrawString("Tổng giá", fntString, Brushes.Black, 350, 290);
                    int count = 0;
                    fntString = new Font("Times New Roman", 10, FontStyle.Regular);
                    for (int i = 0; i < dgvArtB.Rows.Count - 1; i++)
                    {
                        e.Graphics.DrawString(dgvArtB.Rows[i].Cells[0].Value.ToString(), fntString, Brushes.Black, 100,
                                              310 + count); //In tên hàng
                        e.Graphics.DrawString(dgvArtB.Rows[i].Cells[1].Value.ToString(), fntString, Brushes.Black, 250,
                                              310 + count); //In số llượng
                        e.Graphics.DrawString(dgvArtB.Rows[i].Cells[2].Value.ToString(), fntString, Brushes.Black, 350,
                                              310 + count); //In tổng giá
                        count += 20;
                    }

                    e.Graphics.DrawLine(new Pen(Color.Black, 1), 100, 330 + count, 500, 330 + count);
                    //In dấu gạch ngang

                    //In thống đồ uống
                    fntString = new Font("Times New Roman", 10, FontStyle.Bold);
                    e.Graphics.DrawString("DANH SÁCH MẶT HÀNG ĐÃ BÁN", fntString, Brushes.Black, 100, 350 + count);


                    e.Graphics.DrawString("Tên mặt hàng", fntString, Brushes.Black, 100, 380 + count); //In dòng "đồ dùng
                    e.Graphics.DrawString("Số lượng", fntString, Brushes.Black, 250, 380 + count); //In dòng "số lượng"
                    e.Graphics.DrawString("Tổng giá", fntString, Brushes.Black, 350, 380 + count);
                    //In dòng "thành tiền"

                    fntString = new Font("Times New Roman", 10, FontStyle.Regular);
                    for (int i = 0; i < dgvArtS.Rows.Count - 1; i++)
                    {

                        e.Graphics.DrawString(dgvArtS.Rows[i].Cells[0].Value.ToString(), fntString, Brushes.Black, 100,
                                              400 + count);
                        e.Graphics.DrawString(dgvArtS.Rows[i].Cells[1].Value.ToString(), fntString, Brushes.Black, 250,
                                              400 + count);
                        e.Graphics.DrawString(dgvArtS.Rows[i].Cells[2].Value.ToString(), fntString, Brushes.Black, 350,
                                              400 + count);
                        count += 20;
                    }

                    e.Graphics.DrawLine(new Pen(Color.Black, 1), 100, 420 + count, 500, 420 + count);
                    //In dấu gạch ngang

                    //Tổng thống kê

                    fntString = new Font("Times New Roman", 10, FontStyle.Bold);
                    e.Graphics.DrawString("KẾT QUẢ THỐNG KÊ", fntString, Brushes.Black, 100, 440 + count);

                    fntString = new Font("Times New Roman", 10, FontStyle.Bold);
                    e.Graphics.DrawString("Số lượng hàng đã mua:       " + lblM.Text + "        Tổng giá trị:          " + lblTM.Text, fntString, Brushes.Black, 100,
                                          470 + count);
                    e.Graphics.DrawString("Số lượng hàng đã bán         " + lblB.Text + "       Tổng giá trị               " + lblTTB.Text, fntString, Brushes.Black, 100,
                                          490 + count);
                    e.Graphics.DrawString("Tổng chi:      " + lblTC.Text, fntString, Brushes.Black, 100,
                                          510 + count); //In tổng tiền bàn
                    e.Graphics.DrawString("Tổng thu:      " + lblTTT.Text, fntString, Brushes.Black, 100,
                                          530 + count); //In tổng tiền bàn
                    e.Graphics.DrawString("Lãi:           " + lblTL.Text, fntString, Brushes.Black, 100,
                                          550 + count); //In tổng tiền bàn
                    e.HasMorePages = true;
                }
                if (page2 == 2)
                {
                    string strDisplay = "";
                    //In thống kê số lượng sử dụng bàn
                    Font fntString = new Font("Times New Roman", 10, FontStyle.Bold);
                    e.Graphics.DrawString("THỐNG KÊ HÀNG TỒN TRONG KHO", fntString, Brushes.Black, 100, 150);

                    e.Graphics.DrawString("Tên mặt hàng", fntString, Brushes.Black, 100, 180); //In dòng "đồ dùng
                    e.Graphics.DrawString("Số lượng", fntString, Brushes.Black, 250, 180); //In dòng "số lượng"
                    e.Graphics.DrawString("Tổng giá", fntString, Brushes.Black, 350, 180);

                    int count = 0;
                    fntString = new Font("Times New Roman", 10, FontStyle.Regular);
                    for (int i = 0; i < dgvStock.Rows.Count - 1; i++)
                    {
                        e.Graphics.DrawString(dgvStock.Rows[i].Cells[0].Value.ToString(), fntString, Brushes.Black, 100,
                                              200 + count); //In tên hàng
                        e.Graphics.DrawString(dgvStock.Rows[i].Cells[1].Value.ToString(), fntString, Brushes.Black, 250,
                                              200 + count); //In số llượng
                        e.Graphics.DrawString(dgvStock.Rows[i].Cells[2].Value.ToString(), fntString, Brushes.Black, 350,
                                              200 + count); //In tổng giá
                        count += 20;
                    }
                    fntString = new Font("Times New Roman", 10, FontStyle.Bold);
                    e.Graphics.DrawString("Tổng số lượng còn tồn trong kho:       " + lblSLTK.Text, fntString, Brushes.Black, 100,
                                         230 + count); //In tổng tiền bàn
                    e.Graphics.DrawString("Tổng giá trị tồn kho:       " + lblTK.Text, fntString, Brushes.Black, 100,
                                        250 + count); //In tổng tiền bàn

                    e.HasMorePages = false;
                }
                page2++;

            }
            catch (Exception ex)
            {
                MessageBox.Show("Lỗi: \n" + ex.Message);
            }
        }


        //Sự kiện in báo cáo
        private void btnPrint2_Click(object sender, EventArgs e)
        {
            if (dgvArtB.Rows.Count - 1 == 0 && dgvArtS.Rows.Count - 1 == 0)
                MessageBox.Show("Không có dữ liệu để in báo cáo");
            else if (printDialog1.ShowDialog() == DialogResult.OK)
                pDBC.Print();
        }

        #endregion




    }
}
